#include <iostream>
int main()
{
    // int i = 42;
    // if (i)
    //     i = 0; // if条件的值将为true，类型转换。
    // int i = -43;

    //无符号整型与有符号整型的表达式
    // unsigned j=1;
    // std::cout<<i+j<<std::endl; //输出4294967254，i的补码+1

    // 2.1.2节练习
    //  练习2.3：读程序写结果。
    //  unsigned u = 10,u2=42;
    //  std::cout<<u2-u<<std::endl;//32
    //  std::cout<<u-u2<<std::endl;//4294967264

    // int i=10,i2=42;
    // std::cout<<i2-i<<std::endl;//32
    // std::cout<<i-i2<<std::endl;//-32
    // std::cout<<i-u<<std::endl;//0
    // std::cout<<u-i<<std::endl;//0

    // 字符串和字符串字面值
    // 'a'           //单引号括起来的一个字符称为char型字面值
    // "Hello World!"     //双引号括起来的0个或者多个字符构成的字符串字面值

    // 2.1.3节练习
    // 指出下述字面值的数据类型并说明每一组内几种字面值的区别：
    // (a)'a', L'a', "a", L"a"               //'a'是char型字面值,L'a'是宽字符型,"a":字符串型,L"a":宽字符型字符串
    // (b)10, 10u, 10uL, 012, 0xc          //10:整型，10u:无符号类型,10uL:无符号类型长整数,012:八进制数,0xc:16进制数
    // (c)3.14, 3.14f, 3.14L                 //3.14:浮点型,3.14f:float浮点型,3.14L:long double浮点型(写错了)
    // (d)10, 10u, 10., 10e-2                //10:整型，10u:无符号类型，10.（不会），10e-2:科学计数法的浮点数，0.02
    // 10.：一个浮点数
    //浮点数默认double

    // 练习2.6：下面两组定义是否有区别，如果有，请叙述之：
    // int moth = 9, day = 7;    // 10进制
    // int month = 09, day = 07; // 8进制，且9超过了8

    // 练习2.7：下述字面值表示何种含义？它们各自的数据类型是什么？
    // (a)"who goes with F\145rgus?\012"     //字符串，含义：who goes with F49rgus? 12（错误）
    // (b)3.14e1L                            //long double 含义:3.14*10
    // (c)1024f                              //float单精度浮点型 含义：1024.0
    // (d)3.14L                              //long double 含义：3.14
    // 【解答】(a)是一个字符串，包含两个转义字符，其中\145表示字符e，\012表示一个换行符，因此该字符串的输出结果是Whogoes with Fergus?
    // (b)是一个科学计数法表示的扩展精度浮点数，大小为3.14*101=31.4。
    // (c)试图表示一个单精度浮点数，但是该形式在某些编译器中将报错，因为后缀f直接跟在了整数1024后面；改写成1024.f就可以了。
    // (d)是一个扩展精度浮点数，类型是long double，大小为3.14。
    // std::cout << 012 << std::endl;    //打印10
    // std::cout << 12 << std::endl;     //打印12
    // std::cout << "\145" << std::endl; //打印e
    // std::cout << "\012" << std::endl; //换行

    // 练习2.8：请利用转义字符编写一段程序，要求先输出2M，然后转到新一行。
    // 修改程序使其先输出2，然后输出制表符，再输出M，最后转到新一行。
    // std::cout<<"2"<<'\115'<<'\12'<<std::endl;
    // std::cout<<"2"<<'\t'<<'\115'<<'\12'<<std::endl;
    return 0;
}